package io.sage.modules.sys.service.impl;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import io.sage.common.utils.PageUtils;
import io.sage.common.utils.Query;
import io.sage.modules.sys.dao.SysManageDao;
import io.sage.modules.sys.entity.SysManageEntity;
import io.sage.modules.sys.enums.SysManageDelEnum;
import io.sage.modules.sys.service.SysManageService;
import io.sage.modules.sys.shiro.ShiroUtils;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Service("sysManageService")
public class SysManageServiceImpl extends ServiceImpl<SysManageDao, SysManageEntity> implements SysManageService {

    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        // 只查询is_del为0(未删除)的数据
        Wrapper<SysManageEntity> wrapper = new EntityWrapper<SysManageEntity>().eq("is_del", SysManageDelEnum.NORMAL.getCode());
        Page<SysManageEntity> page = this.selectPage(
                new Query<SysManageEntity>(params).getPage(),
                wrapper
        );

        return new PageUtils(page);
    }

    @Override
    public List<SysManageEntity> listAll() {
        // 只查询is_del为0(未删除)的数据
        Wrapper<SysManageEntity> wrapper = new EntityWrapper<SysManageEntity>().eq("is_del", SysManageDelEnum.NORMAL.getCode());
        return this.selectList(wrapper);
    }

    @Override
    public void batchSoftDelete(Integer[] ids) {
        for(Integer id: ids) {
            if(id==null || id<0)
                continue;
            SysManageEntity sysManageEntity = this.selectById(id);
            sysManageEntity.setUpdateUserId(ShiroUtils.getUserEntity().getUserId());  //更新用户id
            sysManageEntity.setUpdateTime(new Date());  //更新时间
            sysManageEntity.setIsDel(SysManageDelEnum.DEL.getCode());  //设置状态为删除
            this.updateById(sysManageEntity);  //写入数据库
        }
    }

    @Override
    public boolean save(SysManageEntity sysManageEntity) {
        Long userId = ShiroUtils.getUserEntity().getUserId();
        sysManageEntity.setCreateUserId(userId);
        sysManageEntity.setUpdateUserId(userId);
        sysManageEntity.setCreateTime(new Date());
        sysManageEntity.setUpdateTime(new Date());
        sysManageEntity.setIsDel(SysManageDelEnum.NORMAL.getCode());  //设置删除状态为未删除
        return this.insert(sysManageEntity);
    }

    @Override
    public boolean updateById(SysManageEntity sysManageEntity){
        Long userId = ShiroUtils.getUserEntity().getUserId();
        sysManageEntity.setUpdateUserId(userId);
        sysManageEntity.setUpdateTime(new Date());
        return super.updateById(sysManageEntity);
    }

}
